//导入env.js 服务器地址
import host from "./env.js";
import axios from "axios";
import { ElMessage } from 'element-plus'
import qs from 'qs'
//创建请求实例
const instance = axios.create({
  baseURL: host, //服务器地址
  timeout: 5000 //5s超时时长
});

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    if (response.status == 200) {
      //获取接口数据
      let rs = response.data;
      if(rs.code==200){
        //将rs封装成promise对象返回
      return Promise.resolve(rs);
      }
      
      //不等于200 失败 弹出错误提示信息
      ElMessage.error(rs.msg)

    }
    return Promise.resolve({});
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);


// 添加请求拦截器
instance.interceptors.request.use(
  function(request){
    //如果发送请求的方法为delete 或 get时
    if (request.method === 'get'){
      request.paramsSerializer = function(params) {
        return qs.stringify(params, { arrayFormat: 'repeat' })
      }
    }
    return request
  },
  function (error){
    return Promise.reject(error);
  }
)

//对外暴露的请求方法
export default {
  /**
   * get请求
   * @param {*} url 接口的相对地址
   * @param {*} params  请求的参数是一个对象 请求时会将对象中的属性拼接成字符串到地址上
   * @returns
   */
  get(url, params) {
    return instance.get(url, {
      params
    });
  },
  /**
   * post 请求
   * @param {*} url
   * @param {*} data 请求数据
   * @returns
   */
  post(url, data) {
    return instance.post(url, data);
  },
  /**
   * put请求
   * @param {*} url
   * @param {*} data
   * @returns
   */
  put(url, data) {
    return instance.put(url, data);
  },
  /**
   * delete请求
   * @returns
   */
  delete(url, params) {
    return instance.delete(url,{
      params
    });
  }

};
